import "libs/wxBase";
//promisify->小程序原生异步解决函数，全局可使用async/await
//备注：由于当前项目部分自定义组件使用ES6/ES7，所以需要勾上'ES6转ES5'和'增加编译'
//参考：https://developers.weixin.qq.com/community/develop/article/doc/00028cbc2e04e0ddf549d535351c13
function promisify(api) {
  return (opt, ...arg) => {
    return new Promise((resolve, reject) => {
      api(Object.assign({}, opt, {
        success: resolve,
        fail: reject
      }), ...arg)
    })
  }
}


App({
  request: promisify(wx.request), //捕捉全局wx.request
  globalData: {
    userInfo: {},
    app_version: '5.0.4', //小程序版本号
    authorizeUserInfo: false, //是否授权
    locationAuthorize: false, //用户位置授权
  
  },
  onLaunch() {
    this.onNetworkStatusChange();
    this.appInitData();
  },

  /**
   * 小程序初始化数据
   */
  appInitData() {
    wx.getSystemInfo({
      success: res => {
        console.log("[系统信息]=>", res)
        this.globalData.sysInfo = res;

        // 供组件[customTitleBar]自定义标题栏使用
        this.globalData.statusBar = res.statusBarHeight;
        let menuBtnBounding = wx.getMenuButtonBoundingClientRect(); //胶囊按钮布局尺寸
        this.globalData.menuBtnBounding = menuBtnBounding;
        this.globalData.customBar = menuBtnBounding.bottom + menuBtnBounding.top - res.statusBarHeight; //标题栏高度
        console.log('[globalData]', this.globalData)
      }
    })


    //初始化，获取用户是否允许位置授权
    wx.getSetting({
      success: res => {
        //已有权限直接获得信息，否则出现授权弹框
        if (res.authSetting['scope.userLocation']) {
          this.globalData.locationAuthorize = true;
        } else if (res.authSetting['scope.userLocation'] == false) {
          this.globalData.locationAuthorize = false;
        } else {
          this.globalData.locationAuthorize = true;
        }
      }
    })
  },

  // 处理版本更新（强制更新）
  checkAppUpdate() {
    const updateManager = wx.getUpdateManager();

    // 请求完新版本信息的回调
    updateManager.onCheckForUpdate((res) => {
      console.log('[onCheckForUpdate]', res)
    })

    updateManager.onUpdateReady(function (res) {
      console.log('[onUpdateReady]', res)
      wx.showModal({
        title: '更新提示',
        content: '新版本已经准备好，即将重启小程序',
        showCancel: false,
        confirmText: '知道了',
        success: () => {
          // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
          updateManager.applyUpdate()
        }
      })
    })
    updateManager.onUpdateFailed((res) => {
      // console.log('新版本下载失败', res)
    })
  },

  onShow(res) {
    console.log('[小程序 onShow]', res)
    this.globalData.xcxScene = res.scene;
    this.globalData.appOnshowQuery = res;
    this.globalData.entranceMode = 'normal';

    //如果本地有上一次保留的遗传码，经常注册时，继续传上
    switch (res.scene) {
      case 1036: //分享卡片进入
        if (res.query.invited_code) {
          this.globalData.invited_code = res.query.invited_code;
          this.globalData.entranceMode = 'code';
        }
        break;
      case 1037: //从其他小程序进入
        if (res.referrerInfo.extraData && res.referrerInfo.extraData.invited_code) {
          this.globalData.invited_code = res.referrerInfo.extraData.invited_code;
          this.globalData.entranceMode = 'code';
        }
        break;
      default:
        if (!wx.isEmpty(res.query) && res.query.invited_code) {
          this.globalData.invited_code = res.query.invited_code;
          this.globalData.entranceMode = 'code';
        }
    }
  },

  /**
   * 全局监听网络变化
   */
  onNetworkStatusChange() {
    wx.getNetworkType({
      success: res => {
        this.globalData.netWorkStatus = res;
        wx.onNetworkStatusChange((res) => {
          console.log('网络变化', res)
          this.globalData.netWorkStatus = res;
        })
      }
    })
  },
})